package modelo.servicio;

import java.util.List;
import modelo.bd.dao.UsuarioDAO;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Usuario;

public class Usuarios {

    private static Usuarios instancia;
    private UsuarioDAO dao;

    private Usuarios() {
        this.dao = new UsuarioDAO();
    }

    public static Usuarios instancia() {
        if (instancia == null) {
            instancia = new Usuarios();
        }
        return instancia;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return new CloneNotSupportedException("No se puede clonar Usuarios.");
    }

    public Usuario obtener(String clave, String contrasena) throws Exception {
        try {
            List<Usuario> users = dao.selectWhere("UPPER(USPE_CLAVE) = UPPER('" + clave + "') "
                    + "AND UPPER(USPE_PASSWORD) = UPPER('" + contrasena + "')");
            if (users == null || users.isEmpty()){
                throw new Exception("El usuario o contraseña son incorrectos");
            }
            return users.get(0);
        } catch (Exception e) {
            throw (e);
        }
    }
    
    public Usuario porClave(String clave) {
        try {
            return dao.selectWhere("UPPER(USPE_CLAVE)= UPPER('" + clave + "')").get(0);
        } catch (Exception e) {
            return null;
        }
    }

    public List<Usuario> todos() throws DAOException {
        return dao.selectAll();
    }
}
